package cn.jsj.onclock.service;

import cn.jsj.onclock.aop.PageNum;
import cn.jsj.onclock.aop.PageSize;
import cn.jsj.onclock.aop.PrimaryKeyParam;
import cn.jsj.onclock.pojo.ClockEnt;
import cn.jsj.onclock.pojo.TaskEnt;
import cn.jsj.onclock.pojo.identity.ClockStatusEnum;
import org.hibernate.validator.constraints.Length;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author 卢斌
 */
@Validated
public interface ClockService {


    /**
     * 用户打卡
     *
     * @param userId   用户Id
     * @param labelId  签到标签Id
     * @param leaveStr 用户留言
     * @return  用户打卡结果
     */
    String userClock(@PrimaryKeyParam Long userId, @PrimaryKeyParam Long labelId, @Length(max = 1000) String leaveStr);


    /**
     * 用户查询自己的打卡信息
     *
     * @param user          用户Id
     * @param clockStatus   打卡状态
     * @param pageNum       页码号
     * @param pageSize      页容量
     * @return  打卡信息
     */
    List<ClockEnt> listUserClockRecord(@PrimaryKeyParam Long user, @NotNull ClockStatusEnum clockStatus, @PageNum Integer pageNum, @PageSize Integer pageSize);


    /**
     * 查询此时通过标签卡可以完成的签到任务
     *
     * @param userId    用户Id
     * @param labelId   标签卡Id
     * @return  此时通过该标签卡可以完成的签到任务
     */
    List<TaskEnt> listLabelCouldFinishTask(@PrimaryKeyParam Long userId, @PrimaryKeyParam Long labelId);



}
